📘 Kapsamlı Rehber

İstatistiksel Değerlendirme Metrikleri

Makine öğrenmesi modellerinin performansını ölçmek için kullanılan temel metriklerin detaylı anlatımı, matematiksel formülleri ve Python örnekleri.

10+
Metrik
20+
Formül
Uygulama

Confusion Matrix

Tüm sınıflandırma metriklerinin temelini oluşturan karmaşıklık matrisi, modelin doğru ve yanlış tahminlerini özetler.

📐 Karmaşıklık Matrisi Nedir?

Confusion Matrix, bir sınıflandırma modelinin performansını görselleştirmek için kullanılan bir tablodur. İkili (binary) sınıflandırmada 2×2 boyutunda olup 4 temel bileşenden oluşur:

Tahmin Edilen
Gerçek Değer Pozitif (+) Negatif (−)
Pozitif (+) TP
True Positive
FN
False Negative
Negatif (−) FP
False Positive
TN
True Negative

True Positive (TP)

Gerçekte pozitif olan ve modelin doğru şekilde pozitif tahmin ettiği örnekler. Örnek: Hasta olan birinin "hasta" olarak tanınması.

False Positive (FP)

Gerçekte negatif olan ama modelin hatalı şekilde pozitif tahmin ettiği örnekler. Tip I Hata olarak da bilinir. Örnek: Sağlıklı birinin "hasta" olarak tanınması.

⚠️

False Negative (FN)

Gerçekte pozitif olan ama modelin hatalı şekilde negatif tahmin ettiği örnekler. Tip II Hata olarak da bilinir. Örnek: Hasta birinin "sağlıklı" olarak tanınması.

🟢

True Negative (TN)

Gerçekte negatif olan ve modelin doğru şekilde negatif tahmin ettiği örnekler. Örnek: Sağlıklı birinin "sağlıklı" olarak tanınması.

💡 Gerçek Hayat Senaryosu

Bir e-posta spam filtresi düşünelim. 1000 e-postayı sınıflandırdık:
TP = 80 (spam e-postalar doğru tespit edildi) · FP = 10 (normal e-postalar yanlışlıkla spam olarak işaretlendi)
FN = 20 (spam e-postalar tespit edilemedi) · TN = 890 (normal e-postalar doğru şekilde geçirildi)

Accuracy (Doğruluk)

Modelin toplam doğru tahmin oranını ölçen en sezgisel ama bazen yanıltıcı olabilen metrik.

📏 Tanım ve Formül

Accuracy, tüm tahminler arasında doğru tahminlerin oranıdır. Hem doğru pozitif hem de doğru negatif tahminleri hesaba katar.

$$ \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} $$

💡 Hesaplama Örneği

Spam filtresi senaryomuzda:
$\text{Accuracy} = \frac{80 + 890}{80 + 890 + 10 + 20} = \frac{970}{1000} = \mathbf{0.97}$ → %97 doğruluk

⚠️ Accuracy Paradoksu — Dengesiz Veri Setleri

Accuracy, veri setinde sınıf dengesizliği olduğunda yanıltıcı olabilir. Örneğin, 1000 hastadan sadece 10'u kanser ise, hiç kanser tahmini yapmayan bir model bile %99 accuracy elde eder — ama hiçbir kanser vakasını tespit edemez! Bu yüzden dengesiz veri setlerinde Precision, Recall ve F1 Score gibi metriklere bakmak daha anlamlıdır.

Precision (Kesinlik)

Modelin "pozitif" dediği tahminlerin ne kadar güvenilir olduğunu ölçer.

🎯 Tanım ve Formül

Precision, modelin pozitif olarak tahmin ettiği örnekler içinde gerçekten pozitif olanların oranıdır. "Pozitif dediğimde ne kadar haklıyım?" sorusunu yanıtlar.

$$ \text{Precision} = \frac{TP}{TP + FP} $$

💡 Hesaplama Örneği

Spam filtresi: $\text{Precision} = \frac{80}{80 + 10} = \frac{80}{90} = \mathbf{0.889}$ → %88.9
Yani spam diye işaretlenen her 90 e-postanın 80'i gerçekten spam.

🔑 Ne Zaman Precision Önemli?

Yanlış pozitifin maliyeti yüksek olduğunda Precision'a odaklanılır:
Spam Filtresi: Önemli bir e-postayı spam olarak işaretlemek risklidir
Arama Motoru: İlgisiz sonuçlar kullanıcı deneyimini bozar
Öneri Sistemi: Yanlış öneriler güven kaybına yol açar

Recall (Duyarlılık / Sensitivity)

Gerçekte pozitif olan örneklerin ne kadarının yakalanabildiğini ölçer.

🔍 Tanım ve Formül

Recall (Sensitivity veya True Positive Rate olarak da bilinir), gerçekte pozitif olan örneklerden modelin doğru tespit ettiği örneklerin oranıdır. "Gerçek pozitiflerin ne kadarını yakalayabildim?" sorusunu yanıtlar.

$$ \text{Recall} = \frac{TP}{TP + FN} $$

💡 Hesaplama Örneği

Spam filtresi: $\text{Recall} = \frac{80}{80 + 20} = \frac{80}{100} = \mathbf{0.80}$ → %80
Yani gerçek 100 spam e-postanın 80'ini tespit edebildik, 20 tanesi gözden kaçtı.

🔑 Ne Zaman Recall Önemli?

Yanlış negatiflerin maliyeti yüksek olduğunda Recall'a odaklanılır:
Kanser Taraması: Bir hastayı kaçırmak hayati tehlike oluşturur
Dolandırıcılık Tespiti: Kaçırılan dolandırıcılık büyük kayıplara yol açar
Güvenlik Sistemleri: Tespit edilemeyen tehditler ciddi riskler oluşturur

⚖️ Precision ve Recall Arasındaki Trade-off

Precision ve Recall genellikle ters yönde hareket eder: birini artırmaya çalıştığınızda diğeri azalma eğilimi gösterir. Eğer modelin eşik değerini düşürürseniz daha fazla pozitif tahmin edersiniz (Recall ↑), ama bu arada yanlış pozitifler de artar (Precision ↓). Bu dengeyi sağlamak için F1 Score kullanılır.

F1 Score

Precision ve Recall arasındaki dengeyi tek bir sayıda özetleyen harmonik ortalama.

⚖️ Tanım ve Formül

F1 Score, Precision ve Recall'un harmonik ortalamasıdır. Aritmetik ortalama yerine harmonik ortalama kullanılır çünkü harmonik ortalama, iki değerden biri düşük olduğunda sonucu daha çok cezalandırır.

$$ F_1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} = \frac{2 \cdot TP}{2 \cdot TP + FP + FN} $$

💡 Hesaplama Örneği

Spam filtresi: $F_1 = 2 \times \frac{0.889 \times 0.80}{0.889 + 0.80} = 2 \times \frac{0.711}{1.689} = \mathbf{0.842}$ → %84.2

📊 F-Beta Score — Ağırlıklı Versiyon

Bazı durumlarda Precision veya Recall'dan birine daha fazla ağırlık vermek isteriz. Bu durumda F-Beta Score kullanılır:

$$ F_\beta = (1 + \beta^2) \times \frac{\text{Precision} \times \text{Recall}}{(\beta^2 \times \text{Precision}) + \text{Recall}} $$
Skor β Değeri Ağırlık Kullanım Alanı
F0.5 0.5 Precision'a daha fazla ağırlık Spam filtreleri, arama motorları
F1 1.0 Eşit ağırlık Genel sınıflandırma problemleri
F2 2.0 Recall'a daha fazla ağırlık Tıbbi teşhis, güvenlik sistemleri

Specificity (Özgüllük)

Gerçekte negatif olan örneklerin ne kadarının doğru tespit edildiğini ölçer.

🛡️ Tanım ve Formül

Specificity (True Negative Rate), gerçekte negatif olan örneklerden modelin doğru tespit ettiği negatif örneklerin oranıdır. Recall'un negatif sınıf için karşılığıdır.

$$ \text{Specificity} = \frac{TN}{TN + FP} $$

💡 Hesaplama Örneği

Spam filtresi: $\text{Specificity} = \frac{890}{890 + 10} = \frac{890}{900} = \mathbf{0.989}$ → %98.9
Normal e-postaların %98.9'u doğru tanındı.

📌 Sensitivity vs. Specificity

Sensitivity (Recall): Hasta olanları ne kadar iyi buluyoruz?
Specificity: Sağlıklı olanları ne kadar iyi ayırt ediyoruz?
İkisi birlikte ROC eğrisinin temelini oluşturur.

ROC Eğrisi ve AUC

Farklı eşik değerlerinde modelin performansını gösteren güçlü bir görselleştirme ve karşılaştırma aracı.

📈 ROC Eğrisi Nedir?

ROC (Receiver Operating Characteristic) eğrisi, farklı eşik (threshold) değerlerinde True Positive Rate (Recall) ile False Positive Rate (1 − Specificity) arasındaki ilişkiyi gösteren bir grafiktir.

$$ \text{TPR} = \frac{TP}{TP + FN} \quad\quad \text{FPR} = \frac{FP}{FP + TN} $$

🏆 AUC (Area Under the Curve)

AUC, ROC eğrisinin altında kalan alandır. 0 ile 1 arasında değer alır ve modelin genel ayırt etme gücünü ölçer.

AUC Değeri Yorum Açıklama
1.0 Mükemmel Model tüm sınıfları %100 doğru ayırt eder
0.9 – 1.0 Çok İyi Yüksek ayırt etme gücü
0.7 – 0.9 İyi Kabul edilebilir performans
0.5 – 0.7 Zayıf Rastgele tahminden biraz iyi
0.5 Rastgele Yazı tura atmakla eşdeğer

🔑 AUC'nin Avantajı

AUC, eşik değerinden bağımsızdır ve farklı modelleri karşılaştırmak için idealdir. Özellikle dengesiz veri setlerinde Accuracy'den daha güvenilir bir performans göstergesidir.

Log Loss (Logaritmik Kayıp)

Modelin olasılık tahminlerinin kalitesini ölçer — sadece doğru/yanlış değil, ne kadar emin olduğu da önemlidir.

📉 Tanım ve Formül

Log Loss (Binary Cross-Entropy), modelin tahmin ettiği olasılık değerlerinin gerçek etiketlerle ne kadar uyumlu olduğunu ölçer. Düşük Log Loss = daha iyi model.

$$ \text{Log Loss} = -\frac{1}{N}\sum_{i=1}^{N}\left[y_i \cdot \log(\hat{y}_i) + (1-y_i) \cdot \log(1-\hat{y}_i)\right] $$

Burada $y_i$ gerçek etiket (0 veya 1), $\hat{y}_i$ modelin tahmin ettiği olasılık, $N$ ise toplam örnek sayısıdır.

🔑 Ne Zaman Log Loss Kullanılır?

• Modelin sadece sınıf tahmini değil, güven derecesi de önemliyse
• Olasılık kalibrasyonu yapıyorsanız
• Kaggle yarışmalarında sıklıkla değerlendirme metriği olarak kullanılır

Regresyon Metrikleri

Sürekli değer tahmini yapan modeller için kullanılan hata ve uyum ölçütleri.

📐 MAE — Mean Absolute Error

Tahmin ile gerçek değer arasındaki mutlak farkların ortalaması. Aykırı değerlere karşı dayanıklıdır.

$$ \text{MAE} = \frac{1}{N}\sum_{i=1}^{N}|y_i - \hat{y}_i| $$

📊 MSE — Mean Squared Error

Tahmin ile gerçek değer arasındaki kare farkların ortalaması. Büyük hataları daha çok cezalandırır.

$$ \text{MSE} = \frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2 $$

📏 RMSE — Root Mean Squared Error

MSE'nin karekökü alınarak orijinal birimle aynı ölçeğe getirilmiş halidir. En yaygın regresyon metriğidir.

$$ \text{RMSE} = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2} $$

🎯 R² — Determinasyon Katsayısı

Modelin bağımlı değişkendeki varyansın ne kadarını açıkladığını gösterir. 1'e ne kadar yakınsa model o kadar iyidir.

$$ R^2 = 1 - \frac{\sum_{i=1}^{N}(y_i - \hat{y}_i)^2}{\sum_{i=1}^{N}(y_i - \bar{y})^2} $$
R² Değeri Yorum
1.0 Mükemmel uyum — model tüm varyansı açıklıyor
0.7 – 1.0 İyi uyum
0.4 – 0.7 Orta düzey uyum
< 0.4 Zayıf uyum — model veriyi iyi açıklayamıyor
< 0 Model, basit ortalama tahminden bile kötü

Hangi Metriği Ne Zaman Kullanmalı?

Doğru metrik seçimi, doğru model seçimi kadar önemlidir.

Senaryo Önerilen Metrik Neden?
Dengeli veri seti Accuracy, F1 Sınıflar dengeli olduğunda accuracy güvenilirdir
Dengesiz veri seti F1, AUC, Precision/Recall Accuracy yanıltıcı olabilir
Yanlış pozitif maliyetli Precision FP'yi minimize etmek istiyoruz
Yanlış negatif maliyetli Recall FN'yi minimize etmek istiyoruz
Olasılık tahmini önemli Log Loss, AUC Modelin güven derecesi değerlendirilir
Model karşılaştırma AUC Eşik değerinden bağımsız karşılaştırma
Sürekli değer tahmini RMSE, MAE, R² Regresyon problemleri için uygundur

Python ile Uygulama

scikit-learn kütüphanesi ile tüm metriklerin hesaplanması.

🐍 Scikit-learn ile Sınıflandırma Metrikleri

from sklearn.metrics import (
    accuracy_score, precision_score, recall_score,
    f1_score, confusion_matrix, classification_report,
    roc_auc_score, log_loss
)
import numpy as np

# Gerçek ve tahmin edilen etiketler
y_true = np.array([1, 0, 1, 1, 0, 1, 0, 0, 1, 0])
y_pred = np.array([1, 0, 1, 0, 0, 1, 1, 0, 1, 0])

# Tüm metrikleri hesapla
print("Accuracy :", accuracy_score(y_true, y_pred))
print("Precision:", precision_score(y_true, y_pred))
print("Recall   :", recall_score(y_true, y_pred))
print("F1 Score :", f1_score(y_true, y_pred))

# Confusion Matrix
print("\nConfusion Matrix:")
print(confusion_matrix(y_true, y_pred))

# Detaylı rapor
print("\nClassification Report:")
print(classification_report(y_true, y_pred))

📊 Regresyon Metrikleri

from sklearn.metrics import (
    mean_absolute_error, mean_squared_error, r2_score
)
import numpy as np

y_true = np.array([3.0, 5.0, 2.5, 7.0, 4.5])
y_pred = np.array([2.8, 5.2, 2.1, 6.8, 4.9])

print("MAE :", mean_absolute_error(y_true, y_pred))
print("MSE :", mean_squared_error(y_true, y_pred))
print("RMSE:", np.sqrt(mean_squared_error(y_true, y_pred)))
print("R²  :", r2_score(y_true, y_pred))